home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / plaf / basic / BasicTextUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  12.5 KB  |  507 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Font;
  8. import java.awt.Graphics;
  9. import java.awt.Insets;
  10. import java.awt.Point;
  11. import java.awt.Rectangle;
  12. import java.awt.Shape;
  13. import java.beans.PropertyChangeEvent;
  14. import javax.swing.JComponent;
  15. import javax.swing.UIManager;
  16. import javax.swing.border.Border;
  17. import javax.swing.plaf.TextUI;
  18. import javax.swing.plaf.UIResource;
  19. import javax.swing.text.AbstractDocument;
  20. import javax.swing.text.BadLocationException;
  21. import javax.swing.text.Caret;
  22. import javax.swing.text.DefaultEditorKit;
  23. import javax.swing.text.Document;
  24. import javax.swing.text.EditorKit;
  25. import javax.swing.text.Element;
  26. import javax.swing.text.Highlighter;
  27. import javax.swing.text.JTextComponent;
  28. import javax.swing.text.Keymap;
  29. import javax.swing.text.Position;
  30. import javax.swing.text.View;
  31. import javax.swing.text.ViewFactory;
  32. import javax.swing.text.Position.Bias;
  33.  
  34. public abstract class BasicTextUI extends TextUI implements ViewFactory {
  35.    private static final EditorKit defaultKit = new DefaultEditorKit();
  36.    transient JTextComponent editor;
  37.    transient boolean painted = false;
  38.    transient RootView rootView = new RootView(this);
  39.    transient UpdateHandler updateHandler = new UpdateHandler(this);
  40.    private static final Position.Bias[] discardBias = new Position.Bias[1];
  41.  
  42.    public View create(Element var1) {
  43.       return null;
  44.    }
  45.  
  46.    public View create(Element var1, int var2, int var3) {
  47.       return null;
  48.    }
  49.  
  50.    protected Caret createCaret() {
  51.       return new BasicCaret();
  52.    }
  53.  
  54.    protected Highlighter createHighlighter() {
  55.       return new BasicHighlighter();
  56.    }
  57.  
  58.    protected Keymap createKeymap() {
  59.       String var1 = this.getKeymapName();
  60.       Keymap var2 = JTextComponent.getKeymap(var1);
  61.       if (var2 == null) {
  62.          Keymap var3 = JTextComponent.getKeymap("default");
  63.          var2 = JTextComponent.addKeymap(var1, var3);
  64.          String var4 = this.getPropertyPrefix();
  65.          Object var5 = UIManager.get(var4 + ".keyBindings");
  66.          if (var5 != null && var5 instanceof JTextComponent.KeyBinding[]) {
  67.             JTextComponent.KeyBinding[] var6 = (JTextComponent.KeyBinding[])var5;
  68.             JTextComponent.loadKeymap(var2, var6, this.getComponent().getActions());
  69.          }
  70.       }
  71.  
  72.       return var2;
  73.    }
  74.  
  75.    public void damageRange(JTextComponent var1, int var2, int var3) {
  76.       this.damageRange(var1, var2, var3, Bias.Forward, Bias.Backward);
  77.    }
  78.  
  79.    public void damageRange(JTextComponent var1, int var2, int var3, Position.Bias var4, Position.Bias var5) {
  80.       if (this.painted) {
  81.          Rectangle var6 = this.getVisibleEditorRect();
  82.          Document var7 = var1.getDocument();
  83.  
  84.          try {
  85.             if (var7 instanceof AbstractDocument) {
  86.                ((AbstractDocument)var7).readLock();
  87.             }
  88.  
  89.             this.rootView.setSize((float)var6.width, (float)var6.height);
  90.             Shape var10 = this.rootView.modelToView(var2, var4, var3, var5, var6);
  91.             Rectangle var11 = var10 instanceof Rectangle ? (Rectangle)var10 : var10.getBounds();
  92.             this.editor.repaint(var11.x, var11.y, var11.width, var11.height);
  93.          } catch (BadLocationException var14) {
  94.          } finally {
  95.             if (var7 instanceof AbstractDocument) {
  96.                ((AbstractDocument)var7).readUnlock();
  97.             }
  98.  
  99.          }
  100.       }
  101.  
  102.    }
  103.  
  104.    protected final JTextComponent getComponent() {
  105.       return this.editor;
  106.    }
  107.  
  108.    public EditorKit getEditorKit(JTextComponent var1) {
  109.       return defaultKit;
  110.    }
  111.  
  112.    protected String getKeymapName() {
  113.       String var1 = this.getClass().getName();
  114.       int var2 = var1.lastIndexOf(46);
  115.       if (var2 >= 0) {
  116.          var1 = var1.substring(var2 + 1, var1.length());
  117.       }
  118.  
  119.       return var1;
  120.    }
  121.  
  122.    public Dimension getMaximumSize(JComponent var1) {
  123.       Document var2 = this.editor.getDocument();
  124.       Insets var3 = var1.getInsets();
  125.       Dimension var4 = new Dimension();
  126.  
  127.       try {
  128.          if (var2 instanceof AbstractDocument) {
  129.             ((AbstractDocument)var2).readLock();
  130.          }
  131.  
  132.          var4.width = (int)Math.min((long)this.rootView.getMaximumSpan(0) + (long)var3.left + (long)var3.right, 2147483647L);
  133.          var4.height = (int)Math.min((long)this.rootView.getMaximumSpan(1) + (long)var3.top + (long)var3.bottom, 2147483647L);
  134.       } finally {
  135.          if (var2 instanceof AbstractDocument) {
  136.             ((AbstractDocument)var2).readUnlock();
  137.          }
  138.  
  139.       }
  140.  
  141.       return var4;
  142.    }
  143.  
  144.    public Dimension getMinimumSize(JComponent var1) {
  145.       Document var2 = this.editor.getDocument();
  146.       Insets var3 = var1.getInsets();
  147.       Dimension var4 = new Dimension();
  148.  
  149.       try {
  150.          if (var2 instanceof AbstractDocument) {
  151.             ((AbstractDocument)var2).readLock();
  152.          }
  153.  
  154.          var4.width = (int)this.rootView.getMinimumSpan(0) + var3.left + var3.right;
  155.          var4.height = (int)this.rootView.getMinimumSpan(1) + var3.top + var3.bottom;
  156.       } finally {
  157.          if (var2 instanceof AbstractDocument) {
  158.             ((AbstractDocument)var2).readUnlock();
  159.          }
  160.  
  161.       }
  162.  
  163.       return var4;
  164.    }
  165.  
  166.    public int getNextVisualPositionFrom(JTextComponent var1, int var2, Position.Bias var3, int var4, Position.Bias[] var5) throws BadLocationException {
  167.       Document var6 = this.editor.getDocument();
  168.  
  169.       int var7;
  170.       try {
  171.          if (var6 instanceof AbstractDocument) {
  172.             ((AbstractDocument)var6).readLock();
  173.          }
  174.  
  175.          if (!this.painted) {
  176.             return -1;
  177.          }
  178.  
  179.          Rectangle var10 = this.getVisibleEditorRect();
  180.          this.rootView.setSize((float)var10.width, (float)var10.height);
  181.          var7 = this.rootView.getNextVisualPositionFrom(var2, var3, var10, var4, var5);
  182.       } finally {
  183.          if (var6 instanceof AbstractDocument) {
  184.             ((AbstractDocument)var6).readUnlock();
  185.          }
  186.  
  187.       }
  188.  
  189.       return var7;
  190.    }
  191.  
  192.    public Dimension getPreferredSize(JComponent var1) {
  193.       Document var2 = this.editor.getDocument();
  194.       Insets var3 = var1.getInsets();
  195.       Dimension var4 = ((Component)var1).getSize();
  196.  
  197.       try {
  198.          if (var2 instanceof AbstractDocument) {
  199.             ((AbstractDocument)var2).readLock();
  200.          }
  201.  
  202.          if (var4.width > var3.left + var3.right && var4.height > var3.top + var3.bottom) {
  203.             this.rootView.setSize((float)(var4.width - var3.left - var3.right), (float)(var4.height - var3.top - var3.bottom));
  204.          }
  205.  
  206.          var4.width = (int)Math.min((long)this.rootView.getPreferredSpan(0) + (long)var3.left + (long)var3.right, 2147483647L);
  207.          var4.height = (int)Math.min((long)this.rootView.getPreferredSpan(1) + (long)var3.top + (long)var3.bottom, 2147483647L);
  208.       } finally {
  209.          if (var2 instanceof AbstractDocument) {
  210.             ((AbstractDocument)var2).readUnlock();
  211.          }
  212.  
  213.       }
  214.  
  215.       return var4;
  216.    }
  217.  
  218.    protected abstract String getPropertyPrefix();
  219.  
  220.    public View getRootView(JTextComponent var1) {
  221.       return this.rootView;
  222.    }
  223.  
  224.    protected Rectangle getVisibleEditorRect() {
  225.       Rectangle var1 = new Rectangle(this.editor.getSize());
  226.       Insets var2 = this.editor.getInsets();
  227.       var1.x += var2.left;
  228.       var1.y += var2.top;
  229.       var1.width -= var2.left + var2.right;
  230.       var1.height -= var2.top + var2.bottom;
  231.       return var1;
  232.    }
  233.  
  234.    protected void installDefaults() {
  235.       String var1 = this.getPropertyPrefix();
  236.       Font var2 = this.editor.getFont();
  237.       if (var2 == null || var2 instanceof UIResource) {
  238.          this.editor.setFont(UIManager.getFont(var1 + ".font"));
  239.       }
  240.  
  241.       Color var3 = this.editor.getBackground();
  242.       if (var3 == null || var3 instanceof UIResource) {
  243.          this.editor.setBackground(UIManager.getColor(var1 + ".background"));
  244.       }
  245.  
  246.       Color var4 = this.editor.getForeground();
  247.       if (var4 == null || var4 instanceof UIResource) {
  248.          this.editor.setForeground(UIManager.getColor(var1 + ".foreground"));
  249.       }
  250.  
  251.       Color var5 = this.editor.getCaretColor();
  252.       if (var5 == null || var5 instanceof UIResource) {
  253.          this.editor.setCaretColor(UIManager.getColor(var1 + ".caretForeground"));
  254.       }
  255.  
  256.       Color var6 = this.editor.getSelectionColor();
  257.       if (var6 == null || var6 instanceof UIResource) {
  258.          this.editor.setSelectionColor(UIManager.getColor(var1 + ".selectionBackground"));
  259.       }
  260.  
  261.       Color var7 = this.editor.getSelectedTextColor();
  262.       if (var7 == null || var7 instanceof UIResource) {
  263.          this.editor.setSelectedTextColor(UIManager.getColor(var1 + ".selectionForeground"));
  264.       }
  265.  
  266.       Color var8 = this.editor.getDisabledTextColor();
  267.       if (var8 == null || var8 instanceof UIResource) {
  268.          this.editor.setDisabledTextColor(UIManager.getColor(var1 + ".inactiveForeground"));
  269.       }
  270.  
  271.       Border var9 = this.editor.getBorder();
  272.       if (var9 == null || var9 instanceof UIResource) {
  273.          this.editor.setBorder(UIManager.getBorder(var1 + ".border"));
  274.       }
  275.  
  276.       Insets var10 = this.editor.getMargin();
  277.       if (var10 == null || var10 instanceof UIResource) {
  278.          this.editor.setMargin(UIManager.getInsets(var1 + ".margin"));
  279.       }
  280.  
  281.       Caret var11 = this.editor.getCaret();
  282.       if (var11 == null || var11 instanceof UIResource) {
  283.          var11 = this.createCaret();
  284.          this.editor.setCaret(var11);
  285.          Object var12 = UIManager.get(var1 + ".caretBlinkRate");
  286.          if (var12 != null && var12 instanceof Integer) {
  287.             Integer var13 = (Integer)var12;
  288.             var11.setBlinkRate(var13);
  289.          }
  290.       }
  291.  
  292.       Highlighter var15 = this.editor.getHighlighter();
  293.       if (var15 == null || var15 instanceof UIResource) {
  294.          this.editor.setHighlighter(this.createHighlighter());
  295.       }
  296.  
  297.    }
  298.  
  299.    protected void installKeyboardActions() {
  300.       this.editor.setKeymap(this.createKeymap());
  301.    }
  302.  
  303.    protected void installListeners() {
  304.    }
  305.  
  306.    public void installUI(JComponent var1) {
  307.       if (var1 instanceof JTextComponent) {
  308.          this.editor = (JTextComponent)var1;
  309.          this.installDefaults();
  310.          this.editor.setOpaque(true);
  311.          this.editor.setAutoscrolls(true);
  312.          this.editor.addPropertyChangeListener(this.updateHandler);
  313.          Document var2 = this.editor.getDocument();
  314.          if (var2 == null) {
  315.             this.editor.setDocument(this.getEditorKit(this.editor).createDefaultDocument());
  316.          } else {
  317.             var2.addDocumentListener(this.updateHandler);
  318.             this.modelChanged();
  319.          }
  320.  
  321.          this.installListeners();
  322.          this.installKeyboardActions();
  323.       } else {
  324.          throw new Error("TextUI needs JTextComponent");
  325.       }
  326.    }
  327.  
  328.    protected void modelChanged() {
  329.       ViewFactory var1 = this.rootView.getViewFactory();
  330.       Document var2 = this.editor.getDocument();
  331.       Element var3 = var2.getDefaultRootElement();
  332.       this.setView(var1.create(var3));
  333.    }
  334.  
  335.    public Rectangle modelToView(JTextComponent var1, int var2) throws BadLocationException {
  336.       return this.modelToView(var1, var2, Bias.Forward);
  337.    }
  338.  
  339.    public Rectangle modelToView(JTextComponent var1, int var2, Position.Bias var3) throws BadLocationException {
  340.       Document var4 = this.editor.getDocument();
  341.  
  342.       Rectangle var5;
  343.       try {
  344.          if (var4 instanceof AbstractDocument) {
  345.             ((AbstractDocument)var4).readLock();
  346.          }
  347.  
  348.          if (!this.painted) {
  349.             return null;
  350.          }
  351.  
  352.          Rectangle var8 = this.getVisibleEditorRect();
  353.          this.rootView.setSize((float)var8.width, (float)var8.height);
  354.          Shape var9 = this.rootView.modelToView(var2, var8, var3);
  355.          var5 = var9.getBounds();
  356.       } finally {
  357.          if (var4 instanceof AbstractDocument) {
  358.             ((AbstractDocument)var4).readUnlock();
  359.          }
  360.  
  361.       }
  362.  
  363.       return var5;
  364.    }
  365.  
  366.    public final void paint(Graphics var1, JComponent var2) {
  367.       if (this.rootView.getViewCount() > 0 && this.rootView.getView(0) != null) {
  368.          Document var3 = this.editor.getDocument();
  369.  
  370.          try {
  371.             if (var3 instanceof AbstractDocument) {
  372.                ((AbstractDocument)var3).readLock();
  373.             }
  374.  
  375.             this.paintSafely(var1);
  376.          } finally {
  377.             if (var3 instanceof AbstractDocument) {
  378.                ((AbstractDocument)var3).readUnlock();
  379.             }
  380.  
  381.          }
  382.       }
  383.  
  384.    }
  385.  
  386.    protected void paintBackground(Graphics var1) {
  387.       var1.setColor(this.editor.getBackground());
  388.       Dimension var2 = this.editor.getSize();
  389.       var1.fillRect(0, 0, var2.width, var2.height);
  390.    }
  391.  
  392.    protected void paintSafely(Graphics var1) {
  393.       this.painted = true;
  394.       Highlighter var2 = this.editor.getHighlighter();
  395.       Caret var3 = this.editor.getCaret();
  396.       if (this.editor.isOpaque()) {
  397.          this.paintBackground(var1);
  398.       }
  399.  
  400.       if (var2 != null) {
  401.          var2.paint(var1);
  402.       }
  403.  
  404.       Rectangle var4 = this.getVisibleEditorRect();
  405.       this.rootView.paint(var1, var4);
  406.       if (var3 != null) {
  407.          var3.paint(var1);
  408.       }
  409.  
  410.    }
  411.  
  412.    protected void propertyChange(PropertyChangeEvent var1) {
  413.    }
  414.  
  415.    protected final void setView(View var1) {
  416.       this.editor.removeAll();
  417.       this.rootView.setView(var1);
  418.       this.painted = false;
  419.       this.editor.revalidate();
  420.    }
  421.  
  422.    protected void uninstallDefaults() {
  423.       if (this.editor.getCaretColor() instanceof UIResource) {
  424.          this.editor.setCaretColor((Color)null);
  425.       }
  426.  
  427.       if (this.editor.getSelectionColor() instanceof UIResource) {
  428.          this.editor.setSelectionColor((Color)null);
  429.       }
  430.  
  431.       if (this.editor.getDisabledTextColor() instanceof UIResource) {
  432.          this.editor.setDisabledTextColor((Color)null);
  433.       }
  434.  
  435.       if (this.editor.getSelectedTextColor() instanceof UIResource) {
  436.          this.editor.setSelectedTextColor((Color)null);
  437.       }
  438.  
  439.       if (this.editor.getBorder() instanceof UIResource) {
  440.          this.editor.setBorder((Border)null);
  441.       }
  442.  
  443.       if (this.editor.getMargin() instanceof UIResource) {
  444.          this.editor.setMargin((Insets)null);
  445.       }
  446.  
  447.       if (this.editor.getCaret() instanceof UIResource) {
  448.          this.editor.setCaret((Caret)null);
  449.       }
  450.  
  451.       if (this.editor.getHighlighter() instanceof UIResource) {
  452.          this.editor.setHighlighter((Highlighter)null);
  453.       }
  454.  
  455.    }
  456.  
  457.    protected void uninstallKeyboardActions() {
  458.       this.editor.setKeymap((Keymap)null);
  459.    }
  460.  
  461.    protected void uninstallListeners() {
  462.    }
  463.  
  464.    public void uninstallUI(JComponent var1) {
  465.       this.editor.removePropertyChangeListener(this.updateHandler);
  466.       this.editor.getDocument().removeDocumentListener(this.updateHandler);
  467.       this.painted = false;
  468.       this.uninstallDefaults();
  469.       this.rootView.setView((View)null);
  470.       ((Container)var1).removeAll();
  471.       this.uninstallKeyboardActions();
  472.       this.uninstallListeners();
  473.    }
  474.  
  475.    public void update(Graphics var1, JComponent var2) {
  476.       this.paint(var1, var2);
  477.    }
  478.  
  479.    public int viewToModel(JTextComponent var1, Point var2) {
  480.       return this.viewToModel(var1, var2, discardBias);
  481.    }
  482.  
  483.    public int viewToModel(JTextComponent var1, Point var2, Position.Bias[] var3) {
  484.       int var4 = -1;
  485.       Document var5 = this.editor.getDocument();
  486.  
  487.       try {
  488.          if (var5 instanceof AbstractDocument) {
  489.             ((AbstractDocument)var5).readLock();
  490.          }
  491.  
  492.          if (this.painted) {
  493.             Rectangle var8 = this.getVisibleEditorRect();
  494.             this.rootView.setSize((float)var8.width, (float)var8.height);
  495.             var4 = this.rootView.viewToModel((float)var2.x, (float)var2.y, var8, var3);
  496.          }
  497.       } finally {
  498.          if (var5 instanceof AbstractDocument) {
  499.             ((AbstractDocument)var5).readUnlock();
  500.          }
  501.  
  502.       }
  503.  
  504.       return var4;
  505.    }
  506. }
  507.